package com.example.demo2;

import java.time.LocalDate;
import java.util.*;

/**
 * 案例二：集合的运用
 */
public class Test {
    public static void main(String[] args) {
        String userStr = "10001:张三:男:1990-01-01#10002:李四:女:1989-01-09#10003:王五:男:1999-09-09#10004:刘备:男:1899-01-01#10005" +
                ":孙悟空:男:1900-01-01#10006:张三:女:1999-01-01#10007:刘备:女:1999-01-01#10008:张三:女:2003-07-01#10009:猪八戒:男:1900-01-01";

        // 1.解析这个字符串,获取里面的用户数据封装成一个user对象存到List集合中去
        List<User> users = new ArrayList<>();

        // 2.开始解析这个用户信息字符串,根据#进行分割
        String[] userInfo = userStr.split("#");

        // 3.遍历这个用户信息数组
        for (String s : userInfo) {
            // 4.把每个元素再根据:进行分割其中每一个s就是一条用户数据 = 10001:张三:男:1990-01-01#10002
            String[] userData = s.split(":");
            // 5.其中数组中的第一个元素就是id,第二个元素就是name,第三个元素就是gender,第四个元素就是birthday
            User user = new User();
            // 6.依次取出4个元素,分别设置到User对象中
            user.setId(Long.parseLong(userData[0]));
            user.setName(userData[1]);
            user.setGender(userData[2]);
            user.setBirthday(LocalDate.parse(userData[3]));
            // 7.把user对象添加到集合中
            users.add(user);
        }

        System.out.println(users);

        // 8.创建一个Map集合
        Map<String, Integer> map = new HashMap<>();
        // 9.遍历集合,把每个用户姓名作为键,次数作为值
        for (User user : users) {
            if (map.containsKey(user.getName())) {
                // 10.说明已经存在了次数+1
                map.put(user.getName(), map.get(user.getName()) + 1);
            } else {
                // 11.说明是第一次出现
                map.put(user.getName(), 1);
            }
        }

        // 使用Stream根据姓名进行分组,用户的作为map的键 名字出现的个数作为值 Collectors.counting()这个方法用于统计用户名字出现的次数
        // users.stream().collect(Collectors.groupingBy(User::getName, Collectors.counting())).forEach((k, v) -> System.out.println(k + ":" + v));

        // 12.遍历map集合并输出
        map.forEach((k, v) -> System.out.println(k + ":" + v));
    }
}
